
using System;

namespace thel
{
	namespace code
	{
		public class CodeKit
		{

			/**
			 * 将一个字节数组中指定位置和长度的部分，
			 * 用指定的字节数组的偏移位置进行编码，为滚动编码
			 * 
			 */
			public static void coding(byte[] bytes,int pos,int len,byte[] code,
			                          int offset,int length)
			{
				if(pos<0||pos>=bytes.Length||len<=0) return;
				if(pos+len>bytes.Length) len=bytes.Length-pos;
				if(offset<0) return;
				if(offset>=length) offset=offset%length;
				int i=offset;
				int c=(offset+len<length)?offset+len:length;
				for(;i<c;i++)
					bytes[pos++]^=code[i];
				len-=length-offset;
				if(len<=0) return;
				c=len/length;
				for(;c>0;c--)
				{
					for(i=0;i<length;i++)
						bytes[pos++]^=code[i];
				}
				c=len%length;
				for(i=0;i<c;i++)
					bytes[pos++]^=code[i];
			}
			private CodeKit ()
			{
			}
		}
	}
}

